#include "game.h"
int x=0;
int y=0;
void menu()
{
  printf("###########################\n");
  printf("#####1.play     0.exit#####\n");
  printf("###########################\n");
  printf("Please Selet# ");
}
int ChessCount(int board[][COL],int row,int col,enum Dir d)
{
  int _x=x-1;
  int _y=y-1;
  int count=0;
  while(1)
  {
    switch(d)
    {
      case LEFT:_y--;break;
      case LEFT_UP:_y--;_x--;break;
      case LEFT_DOWN:_y--;_x++;break;
      case UP:_x--;break;
      case DOWN:_x++;break;
      case RIGHT:_y++;break;
      case RIGHT_UP:_y++;_x--;break;
      case RIGHT_DOWN:_x++;_y++;break;
    }
    if(_x<0 ||_x >row-1 ||_y<0 ||_y>col-1)
    {
      break;
    }    
    if(board[x-1][y-1]==board[_x][_y])
    {
      count++;
    }
    else 
      break;
  }
  return count;
}
int IsOver(int board[][COL],int row,int col)
{
  int count1=ChessCount(board,ROW,COL,LEFT)+ChessCount(board,ROW,COL,RIGHT)+1;  
  int count2=ChessCount(board,ROW,COL,UP)+ChessCount(board,ROW,COL,DOWN)+1;  
  int count3=ChessCount(board,ROW,COL,LEFT_UP)+ChessCount(board,ROW,COL,RIGHT_DOWN)+1;  
  int count4=ChessCount(board,ROW,COL,LEFT_DOWN)+ChessCount(board,ROW,COL,RIGHT_UP)+1;  
  if(count1>=5 || count2>=5 ||count3>=5 || count4>=5)
  {
    if(board[x-1][y-1]==PLAYER1)
        return PLAYER1;
    return PLAYER2;
  }
  int i=0;
  for(;i<row;i++)
  {
    int j=0;
    for(;j<col;j++)
    {
      if(board[i][j]==0)
          return NEXT;
    }
  }
  return DRAW;
}
void ShowBoard(int board[][COL],int row,int col)
{
  printf("\e[1;1H\e[2J");
  printf(" ");
  int i=1;
  for(;i<=col;i++)
  {
    printf("%3d",i);
  }
  printf("\n");
  for(i=0;i<row;i++)
  {
    int j=0;
    printf("%2d",i+1);
    for(;j<col;j++)
    {
      if(board[i][j]==0)
        printf(" . ");
      else if(board[i][j]==PLAYER1)
        printf(" ◯ ");
      else if(board[i][j]==PLAYER2)
        printf(" ⬤ ");
    }
    printf("\n");
  }
}
void PlayerMove(int board[][COL],int row,int col,int who)
{
  printf("Player%d Please Enter Your Pos#\n",who);
  while(1)
  {
    scanf("%d %d",&x,&y);
    if(x<1||x>row||y<1||y>col)
    {
      printf("Postion Error!\n");
      continue;
    }
    else if(board[x-1][y-1]!=0)
    {
      printf("Postion Is Occupied!\n");
      continue;
    }
    else
    {
      board[x-1][y-1]=who;
      break;
    }
  }
}
void game()
{
  int board[ROW][COL];
  memset(board,0,sizeof(board));
  int result=NEXT;
  do
  {
    ShowBoard(board,ROW,COL);
    PlayerMove(board,ROW,COL,PLAYER1);
    result=IsOver(board,ROW,COL);
    if(result!=NEXT) break;
    ShowBoard(board,ROW,COL);
    PlayerMove(board,ROW,COL,PLAYER2);
    result=IsOver(board,ROW,COL);
    if(result!=NEXT) break;
  }while(1);
  switch(result)
  {
    case PLAYER_WIN1:printf("恭喜用户1赢了\n");break;
    case PLAYER_WIN2:printf("恭喜用户2赢了\n");break;
    case DRAW:printf("平局\n");break;
    default:break;
  }
    ShowBoard(board,ROW,COL);
}
